package com.hhd.flow.engine.lisener;

import com.hhd.flow.engine.lisener.event.*;
import com.hhd.flow.engine.lisener.event.BeforeEnterUserTaskEvent;
import com.hhd.flow.engine.lisener.impl.DefaultFlowProcessEventMultiCaster;

import java.util.List;

public interface FlowProcessEventMultiCaster {
    List<DefaultFlowProcessEventMultiCaster.ParsedLisener> getParsedLiseners();

    void onStartProcessBefore(StartProcessBeforeEvent event);

    void onStartProcessAfter(StartProcessAfterEvent event);

    void onBeforeEnterUserTask(BeforeEnterUserTaskEvent event);

    void onAfterEnterUserTask(AfterEnterUserTaskEvent event);

    void onUserTaskBeforeComplete(UserTaskCompleteEvent event);

    void onUserTaskAfterComplete(UserTaskCompleteEvent event);

    void onUserTaskCompleteBeforeEvery(UserTaskCompleteEveryEvent event);

    void onUserTaskCompleteAfterEvery(UserTaskCompleteEveryEvent event);

    void onProcessBeforeApproved(ProcessApprovedEvent event);

    void onProcessAfterApproved(ProcessApprovedEvent event);

    void onFlowUserTaskBeforeEnd(FlowUserTaskEndEvent event);

    void onFlowUserTaskAfterEnd(FlowUserTaskEndEvent event);

    void onFlowUserTaskBeforeToForm(FlowUserTaskToFormEvent event);

    void onFlowUserTaskAfterToForm(FlowUserTaskToFormEvent event);

    void onEnterNode(EnterNodeEvent event);

    void onPassNode(PassNodeEvent event);

    void onProcessBeforeFinish(ProcessFinishEvent event);

    void onProcessAfterFinish(ProcessFinishEvent event);

    void onCreateUserTaskEvent(CreateUserTaskEvent event);

    void onBeforeWithdraw(WithdrawEvent event);

    void onAfterWithdraw(WithdrawEvent event);
}
